#include <stdio.h>
#include <string.h>
#include "gps.h"

void get_gps_data(char *buff, struct gprmc_data *gps_data) {
    char *p = NULL;

    if(buff == NULL || gps_data == NULL) {
        printf("Invalid input pointers\n");
        return;
    }

    p = strstr(buff, "$GPRMC");
    if(p == NULL) {
        printf("No GPRMC frame found\n");
        return;
    }

    // 打印原始帧（用于调试，确认数据是否正确）
    printf("Received GPRMC frame: %s\n", p);

    // 修正格式字符串：
    // 1. 时间用%f接收（支持小数，如084750.47）
    // 2. 匹配实际字段分隔符（注意逗号和空字段）
    int ret = sscanf(p, "$GPRMC,%f,%c,%f,%c,%f,%c,%f,,%d,,, %c*%*x",
        &(gps_data->time),       // 时间（浮点数，如084750.47）
        &(gps_data->state),      // 状态（A/V）
        &(gps_data->latitude),   // 纬度
        &(gps_data->NS),         // 南北纬
        &(gps_data->longitude),  // 经度
        &(gps_data->EW),         // 东西经
        &(gps_data->speed),      // 速度
        &(gps_data->date),       // 日期（如170424）
        &(gps_data->mode));      // 模式（A）

    // 检查解析结果（实际应解析9个字段）
    if(ret != 9) {
        printf("Failed to parse GPRMC data (got %d fields, expected 9)\n", ret);
        return;
    }

    // 打印解析结果
    printf("解析成功:\n");
    printf("时间: %.2f, 状态: %c, 纬度: %f%c, 经度: %f%c\n",
        gps_data->time,
        gps_data->state,
        gps_data->latitude, gps_data->NS,
        gps_data->longitude, gps_data->EW);
}
